/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import generica.Generica;
import java.io.Serializable;
import java.util.InputMismatchException;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 *
 * @author calandreli
 */
@Entity
@Table(name = "juridica")
@PrimaryKeyJoinColumn(name = "id_Pessoa")
@SequenceGenerator(name = "juridica_seq", sequenceName = "id_Juridica", allocationSize = 1)
public class Juridica extends Pessoa implements Generica {

    //@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "juridica_seq")
    @Column(name = "id_Juridica")
    private int id_Juridica;
    @Column(name = "cnpj")
    private String cnpj;
    @Column(name = "insc_Estadual")
    private String insc_Estadual;
    @Column(name = "insc_Municipal")
    private String insc_Municipal;
    @Column(name = "razao_social")
    private String razaoSocial;
    @Column(name = "nome_Banco")
    private String nome_Banco;
    @Column(name = "num_Banco")
    private int num_Banco;
    @Column(name = "num_Agencia")
    private int num_Agencia;
    @Column(name = "nome_Agencia")
    private String nome_Agencia;
    @Column(name = "num_Conta")
    private int num_Conta;
    @Column(name = "tipoEntity")
    private String tipoEntity;

    public String getInsc_Estadual() {
        return insc_Estadual;
    }

    public void setInsc_Estadual(String insc_Estadual) {
        this.insc_Estadual = insc_Estadual;
    }

    public String getInsc_Municipal() {
        return insc_Municipal;
    }

    public void setInsc_Municipal(String insc_Municipal) {
        this.insc_Municipal = insc_Municipal;
    }

    public int getId_Juridica() {
        return id_Juridica;
    }

    public void setId_Juridica(int id_Juridica) {
        this.id_Juridica = id_Juridica;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public String getRazaoSocial() {
        return razaoSocial;
    }

    public void setRazaoSocial(String razaoSocial) {
        this.razaoSocial = razaoSocial;
    }

    public String getNome_Banco() {
        return nome_Banco;
    }

    public void setNome_Banco(String nome_Banco) {
        this.nome_Banco = nome_Banco;
    }

    public int getNum_Banco() {
        return num_Banco;
    }

    public void setNum_Banco(int num_Banco) {
        this.num_Banco = num_Banco;
    }

    public int getNum_Agencia() {
        return num_Agencia;
    }

    public void setNum_Agencia(int num_Agencia) {
        this.num_Agencia = num_Agencia;
    }

    public String getNome_Agencia() {
        return nome_Agencia;
    }

    public void setNome_Agencia(String nome_Agencia) {
        this.nome_Agencia = nome_Agencia;
    }

    public int getNum_Conta() {
        return num_Conta;
    }

    public void setNum_Conta(int num_Conta) {
        this.num_Conta = num_Conta;
    }

    public String getTipoEntity() {
        return tipoEntity;
    }

    public void setTipoEntity(String tipoEntity) {
        this.tipoEntity = tipoEntity;
    }

    public static boolean validarCNPJ(String CNPJ) {
// considera-se erro CNPJ's formados por uma sequencia de numeros iguais
        if (CNPJ.equals("00000000000000") || CNPJ.equals("11111111111111")
                || CNPJ.equals("22222222222222") || CNPJ.equals("33333333333333")
                || CNPJ.equals("44444444444444") || CNPJ.equals("55555555555555")
                || CNPJ.equals("66666666666666") || CNPJ.equals("77777777777777")
                || CNPJ.equals("88888888888888") || CNPJ.equals("99999999999999")
                || (CNPJ.length() != 14)) {
            return (false);
        }

        char dig13, dig14;
        int sm, i, r, num, peso;

// "try" - protege o código para eventuais erros de conversao de tipo (int)
        try {
// Calculo do 1o. Digito Verificador
            sm = 0;
            peso = 2;
            for (i = 11; i >= 0; i--) {
// converte o i-ésimo caractere do CNPJ em um número:
// por exemplo, transforma o caractere '0' no inteiro 0
// (48 eh a posição de '0' na tabela ASCII)
                num = (int) (CNPJ.charAt(i) - 48);
                sm = sm + (num * peso);
                peso = peso + 1;
                if (peso == 10) {
                    peso = 2;
                }
            }

            r = sm % 11;
            if ((r == 0) || (r == 1)) {
                dig13 = '0';
            } else {
                dig13 = (char) ((11 - r) + 48);
            }

// Calculo do 2o. Digito Verificador
            sm = 0;
            peso = 2;
            for (i = 12; i >= 0; i--) {
                num = (int) (CNPJ.charAt(i) - 48);
                sm = sm + (num * peso);
                peso = peso + 1;
                if (peso == 10) {
                    peso = 2;
                }
            }

            r = sm % 11;
            if ((r == 0) || (r == 1)) {
                dig14 = '0';
            } else {
                dig14 = (char) ((11 - r) + 48);
            }

// Verifica se os dígitos calculados conferem com os dígitos informados.
            if ((dig13 == CNPJ.charAt(12)) && (dig14 == CNPJ.charAt(13))) {
                return (true);
            } else {
                return (false);
            }
        } catch (InputMismatchException erro) {
            return (false);
        }
    }

    @Override
    public Serializable getIdentificador() {
        return this.id_Juridica;
    }
}
